/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import entidade.Produtor;
import entidade.Usuario;
import javax.persistence.TypedQuery;
import util.Mensagem;

public class ProdutorDAO extends GenericDAO<Produtor> {
    Produtor produtor;
    Usuario usuario;
    public Produtor obterProdutorUsuario(String email, String senha) {
//            this.iniciarTransacao();            

        try {
        produtor = new Produtor();

//Verifica se aquele usuário que tentou logar já possui o perfil de produtor concluído           
            String jpql = "SELECT p FROM Usuario u, Produtor p WHERE u.email=:email AND u.senha=:senha AND u.id=p.id";
            TypedQuery<Produtor> query = getEntityManager().createQuery(jpql, Produtor.class);
            query.setParameter("email", email).setParameter("senha", senha);
             produtor = query.getSingleResult();
//Utilizar o ResultList, pois é necessário saber se retornou algum resultado do BD
//o getSingleResult da erro quando é retornado null da consulta.            
//            produtores=query.getResultList();
//Verifica se retornou um resultado para poder entrar no foreach,
//pois não pode haver mais de um resultado     
            System.out.println("Verificar a lista");
//            if (produtores.size()==1){
            System.out.println("Verificando a lista");

//           produtores.stream().forEach((produtor) ->{
//               
//            produtorSaida.setAssociacao(produtor.getAssociacao());
//            produtorSaida.setCnpj(produtor.getCnpj());
//            produtorSaida.setColheitaList(produtor.getColheitaList());
//            produtorSaida.setCpf(produtor.getCnpj());
//            produtorSaida.setId(produtor.getId());
//            produtorSaida.setLocal(produtor.getLocal());
//            produtorSaida.setNome(produtor.getNome());
//            produtorSaida.setRg(produtor.getRg());
//            produtorSaida.setSobrenome(produtor.getSobrenome());
//            produtorSaida.setUsuarioId(produtor.getUsuarioId());
//            produtorSaida.setTelefone(produtor.getTelefone());
//            
//        });
            System.out.println("produtor saida" + produtor.getNome());
//            }
            //Se cair aqui é porque o produtor já possui o perfil "concluiído"
            if (produtor != null && produtor.getUsuarioId().getEmail().equals(email) && produtor.getUsuarioId().getSenha().equals(senha)) {
                System.out.println("email dao" + produtor.getUsuarioId().getEmail());
//              this.confirmarTransacao();
                Mensagem.setErroAoLogar("Sucesso!");
                return produtor;

            } else {

                return null;
            }

        } catch (Exception e) {
            verificarUsuario(email, senha);
            System.out.println("Erro ao obter por produtor: " + e.getMessage());

            return null;
        }
    }

    //Método utilizado para verificar se o usuário existe ou não.

    public void verificarUsuario(String email, String senha) {

        try {
            usuario= new Usuario();
            System.out.println("verificando a lista de usuarios");
//Consulta realizada para verificar se aquele usuário que tentou logar existe no BD e informar 
//que é necessário ele concluir o seu perfil de produtor.                
            String jpql2 = "SELECT u FROM Usuario u WHERE u.email=:email AND u.senha=:senha";
            TypedQuery<Usuario> query2 = getEntityManager().createQuery(jpql2, Usuario.class);
            query2.setParameter("email", email).setParameter("senha", senha);
             usuario = query2.getSingleResult();
            /*
             Para acessar a variável ou método static não é preciso instanciar o objeto, basta apenas chamar a 
             classe e o seu método ou variável.
             */ 
            if (usuario!=null) {

                Mensagem.setErroAoLogar("Perfil do Produtor "+usuario.getEmail()+" Está Incompleto!");
            }
        } catch (Exception e) {
            //Se não retornar nem um produtor ou usuário cai aqui.
            Mensagem.setErroAoLogar("Dados Incorretos!");
            System.out.println("Erro ao verificar usuario: " + e.getMessage());

        }
    }

}
